package com.android.support.lib.universal.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.StringReader;
import java.util.Date;
import java.util.List;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;

/**
 * @ClassName FastJsonUtils
 * @Description 简单封装alibaba产出的json处理框架 (JSON parser + JSON generator)
 */
public class UtilFastjson {

	private static SerializeConfig mapping = new SerializeConfig();

	private static String dateFormat;
	static {
		dateFormat = "yyyy-MM-dd HH:mm:ss";
		mapping.put(Date.class, new SimpleDateFormatSerializer(dateFormat));
	}

	/**
	 * 将对象（实体类，或 list）转化为json数据。 实体类必须有setter,getter方法，及无参构造方法
	 * 
	 * @param obj
	 *            对象
	 * @return 返回json数据
	 */
	public static String setJson(Object obj) {
		String json = JSON.toJSONString(obj, mapping,
				SerializerFeature.WriteMapNullValue);
		return json;
	}

	/**
	 * 获取json数据 数组
	 * 
	 * @param json
	 *            json数据
	 * @return
	 */
	public static JSONArray getJSONArray(String json) {

		JSONArray array = JSON.parseArray(json);

		return array;
	}

	/**
	 * 获取实体类
	 * 
	 * @param json
	 *            json数据
	 * @param clazz
	 *            实体类
	 * @return 返回实体类
	 */
	public static <X> X getEntity(String json, Class<X> clazz) {
		X x = JSON.parseObject(json, clazz);
		return x;
	}

	/**
	 * 获取list集合
	 * 
	 * @param json
	 *            json数据
	 * @param clazz
	 *            List里面的类型，即List<clazz>d
	 * @return 返回list集合
	 */
	public static <X> List<X> getList(String json, Class<X> clazz) {
		return JSON.parseArray(json, clazz);
	}

	/**
	 * 将json数据写入到文件，永久保存
	 * 
	 * @param json
	 *            json数据
	 * @param path
	 *            文件完整路径名 如： "/sdcard/json.json"或 "/sdcard/json.txt"
	 */
	public static void writeData(String json, String path) {
		// TODO Auto-generated method stub
		try {
			// 读取json数据
			BufferedReader reader = new BufferedReader(new StringReader(json));
			// 写入json数据
			BufferedWriter writer = new BufferedWriter(new FileWriter(path));
			int len = 0;
			char[] buffer = new char[1024];
			while ((len = reader.read(buffer)) != -1) {
				writer.write(buffer, 0, len);
			}
			writer.flush();
			writer.close();
			reader.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 获取存储在文件里的JSON数据
	 * 
	 * @param path
	 *            文件的完整路径名，包括后缀
	 * @return
	 */
	public static String readData(String path) {

		String json = ReadFile(path);
		return json;

	}

	/**
	 * 读文件，返回字符串
	 * 
	 * @param path
	 *            文件完整路径名，包括后缀名
	 * @return
	 */
	public static String ReadFile(String path) {
		File file = new File(path);
		BufferedReader reader = null;
		String laststr = "";
		try {
			// System.out.println("以行为单位读取文件内容，一次读一整行：");
			reader = new BufferedReader(new FileReader(file));
			String tempString = null;
			// 一次读入一行，直到读入null为文件结束
			while ((tempString = reader.readLine()) != null) {
				// 显示行号
				laststr = laststr + tempString;
			}
			reader.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (Exception e1) {
				}
			}
		}
		return laststr;
	}

}
